home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 41.zip / BS1 part 41 / Devpac 2.12 disk 2.adf / include.cbm / exec / lists.i < prev    next >
Text File  |  1987-03-31  |  4KB  |  158 lines

  1.     IFND EXEC_LISTS_I
  2. EXEC_LISTS_I SET 1
  3. **********************************************************************
  4. *
  5. *   Commodore Amiga -- ROM Operating System Executive Include File
  6. *
  7. **********************************************************************
  8. *
  9. *   Source Control:
  10. *
  11. *       $Header: lists.i,v 33.1 86/03/07 17:30:54 neil Exp $
  12. *
  13. *       $Locker:  $
  14. *
  15. **********************************************************************
  16.  
  17.     IFND EXEC_NODES_I
  18.     INCLUDE "exec/nodes.i"
  19.     ENDC !EXEC_NODES_I
  20.  
  21.  
  22. *---------------------------------------------------------------------
  23. *
  24. *   List Structures
  25. *
  26. *---------------------------------------------------------------------
  27.  
  28. ; normal, full featured list
  29.  STRUCTURE  LH,0
  30.     APTR    LH_HEAD
  31.     APTR    LH_TAIL
  32.     APTR    LH_TAILPRED
  33.     UBYTE   LH_TYPE
  34.     UBYTE   LH_pad
  35.     LABEL   LH_SIZE
  36.  
  37. ; minimal list, no type checking possible
  38.  STRUCTURE  MLH,0
  39.     APTR    MLH_HEAD
  40.     APTR    MLH_TAIL
  41.     APTR    MLH_TAILPRED
  42.     LABEL   MLH_SIZE
  43.  
  44.  
  45. NEWLIST     MACRO   * list
  46.             MOVE.L  \1,(\1)
  47.             ADDQ.L  #LH_TAIL,(\1)
  48.             CLR.L   LH_TAIL(\1)
  49.             MOVE.L  \1,(LH_TAIL+LN_PRED)(\1)
  50.             ENDM
  51.  
  52. TSTLIST     MACRO   * [list]
  53.             IFC     '\1',''
  54.             CMP.L   LH_TAIL+LN_PRED(A0),A0
  55.             ENDC
  56.             IFNC    '\1',''
  57.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  58.             ENDC
  59.             ENDM
  60.  
  61. SUCC        MACRO   * node,succ
  62.             MOVE.L  (\1),\2
  63.             ENDM
  64.  
  65. PRED        MACRO   * node,pred
  66.             MOVE.L  LN_PRED(\1),\2
  67.             ENDM
  68.  
  69. IFEMPTY     MACRO   * list,label
  70.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  71.             BEQ     \2
  72.             ENDM
  73.  
  74. IFNOTEMPTY  MACRO   * list,label
  75.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  76.             BNE     \2
  77.             ENDM
  78.  
  79. TSTNODE     MACRO   * node,next
  80.             MOVE.L  (\1),\2
  81.             TST.L   (\2)
  82.             ENDM
  83.  
  84. NEXTNODE    MACRO   * next,current,exit_label (DX,AX,DISP16)
  85.             MOVE.L  \1,\2
  86.             MOVE.L  (\2),\1
  87.             IFC     '\0',''
  88.             BEQ     \3
  89.             ENDC
  90.             IFNC    '\0',''
  91.             BEQ.S   \3
  92.             ENDC
  93.             ENDM
  94.  
  95. ADDHEAD     MACRO
  96.             MOVE.L  (A0),D0
  97.             MOVE.L  A1,(A0)
  98.             MOVEM.L D0/A0,(A1)
  99.             MOVE.L  D0,A0
  100.             MOVE.L  A1,LN_PRED(A0)
  101.             ENDM
  102.  
  103. ADDTAIL     MACRO
  104.             LEA     LH_TAIL(A0),A0
  105.             MOVE.L  LN_PRED(A0),D0
  106.             MOVE.L  A1,LN_PRED(A0)
  107.             MOVE.L  A0,(A1)
  108.             MOVE.L  D0,LN_PRED(A1)
  109.             MOVE.L  D0,A0
  110.             MOVE.L  A1,(A0)
  111.             ENDM
  112.  
  113. REMOVE      MACRO
  114.             MOVE.L  (A1),A0
  115.             MOVE.L  LN_PRED(A1),A1
  116.             MOVE.L  A0,(A1)
  117.             MOVE.L  A1,LN_PRED(A0)
  118.             ENDM
  119.  
  120. REMHEAD     MACRO
  121.             MOVE.L  (A0),A1
  122.             MOVE.L  (A1),D0
  123.             BEQ.S   REMHEAD\@
  124.             MOVE.L  D0,(A0)
  125.             EXG.L   D0,A1
  126.             MOVE.L  A0,LN_PRED(A1)
  127. REMHEAD\@
  128.             ENDM
  129.  
  130. *----------------------------------------------------------------
  131. *
  132. *  REMHEADQ -- remove-head quickly
  133. *
  134. *       Useful when a scratch register is available, and
  135. *       list is known to contain at least one node.
  136. *
  137. *----------------------------------------------------------------
  138.  
  139. REMHEADQ    MACRO   * head,node,scratchReg
  140.             MOVE.L  (\1),\2
  141.             MOVE.L  (\2),\3
  142.             MOVE.L  \3,(\1)
  143.             MOVE.L  \1,LN_PRED(\3)
  144.             ENDM
  145.  
  146. REMTAIL     MACRO
  147.             MOVE.L  LH_TAIL+LN_PRED(A0),A1
  148.             MOVE.L  LN_PRED(A1),D0
  149.             BEQ.S   REMTAIL\@
  150.             MOVE.L  D0,LH_TAIL+LN_PRED(A0)
  151.             EXG.L   D0,A1
  152.             MOVE.L  A0,(A1)
  153.             ADDQ.L  #4,(A1)
  154. REMTAIL\@
  155.             ENDM
  156.  
  157.     ENDC !EXEC_LISTS_I
  158.